1 Introduction

Every year, the New York State Forest Rangers have to rescue people who use the outdoors for recreation. Some get injured and need evacuation, some get lost and need search and rescue, but all put a burden on our park services resources. Any efforts to educate people on how to be safer and more responsible in nature will go a long way towards helping alleviate this burden but the Department of Environmental Conservation does not have the resources to market to everyone. In our analysis, we will try to identify groups that are at a greater risk of needing evacuation so we can make a recommendation on where best to allocate resources on awareness. We decided to focus on the Adirondack Park because of the region’s high traffic and ability to attract inexperienced visitors. &&&&The variables of interest are the amount of rangers involved, amount of people being rescued, age and gender of rescued, and the type of activity that caused the accident. We will be analyzing the rescues happening in the Adirondack Park to try to find groups of people who are at a greater risk of needing rescue and would therefore benefit more from targeted awareness campaigns.

2 Background

This is observational data originally found on Data World (https://data.world/) from the NYSDEC on forest ranger incident reports. In order to help understand the data it would be helpful for the reader to have previous knowledge about recreational activities in New York State forests and the risks involved with those activities.

3 Methods and Results

To help us visualise the data we can look at all the incidents plotted on a map of New York State as shown in section 3.1. From visual inspection, we can see the highest density of rescues occur in the Adirondacks. We can verify this by using the table function to summarize the results.

The two plots below are created from location of the rescues within New York State. Looking at the plot of the entire state, there are two regions where rescues occur more frequently, the high peaks being the larger area of concentration. Because of this concentration, a second plot was made to focus on the rescues within the Adirondack mountains.

3.1 Location Found of all Incidents

<<<<<<< HEAD =======
tmap mode set to interactive viewing
>>>>>>> ca5a01703f207ba1e1c6466ecb3e4c110123f95f

3.2 Location Found in Adirondacks Grouped by Age

<<<<<<< HEAD =======
tmap mode set to interactive viewing
>>>>>>> ca5a01703f207ba1e1c6466ecb3e4c110123f95f

The data frame can be overwhelming to look at. It is easier to digest when summarized with the “table” function. We can use this function to better visualize the variables of interest.

Some initial observations are that more men need assistance than women, there were more searches than rescues, recoveries, or fugitive searches combined, and the most common activity to need assistance was hiking, followed not so closely by boating.

Our initial endeavor was to see if there was a correlation between subject age and type of response. From our analysis we concluded that there was no such correlation. The box plot is a helpful visualization because

There seems to be a correlation between the subject’s age and what type of response is typically needed. It can be concluded that as people get older, they may become more familiar with the land, or simply be more careful with their activities. Search and Rescue responses are the only type that occur for people 30 and under, proving that the younger people should probably have more training on certain skills before traveling into the mountains alone. Although, the mean is around 35 to 40 years old, meaning that mostly people over 30 are more common in general in the area, and therefore needing the help just as much. Overall all people traversing into the mountains should have better safety awareness before going out alone, in case any problems occur. Another important point to make about this data is the noticeable correlation between older people and recovery. As we all know, as we age our bodies are not as capable as they used to be, meaning they are more likely to be injured, causing a need to be rescued. One way to decrease the need for rescues could be extra training about safety precautions and give fair warnings about certain activities. For example if a hike has one area that gets slippery before the rest, put up more signs or make sure it is mentioned before anyone even begins the excursion.

<<<<<<< HEAD =======
Warning: Removed 70 rows containing non-finite values (stat_boxplot).

>>>>>>> ca5a01703f207ba1e1c6466ecb3e4c110123f95f <<<<<<< HEAD
mean(y$incident_time_elapsed)

search <- y %>%
  filter(response_type=="Search")
rescue <- y %>%
  filter(response_type=="Rescue")
recovery <- y %>%
  filter(response_type=="Recovery")

rev <- mean(search$incident_time_elapsed, na.rm = "TRUE")
res <- mean(rescue$incident_time_elapsed, na.rm = "TRUE")
sea <- mean(recovery$incident_time_elapsed, na.rm = "TRUE")
cat('Mean incident time elapsed
Recovery= ',rev)
cat('
Rescue= ',res)
cat('
Search= ',sea)
=======

Call:
lm(formula = number_of_rangers_involved ~ subject_age, data = raw_adk_data)

Residuals:
   Min     1Q Median     3Q    Max 
-2.536 -2.207 -1.240  0.590 80.700 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 3.142535   0.219316  14.329   <2e-16 ***
subject_age 0.004627   0.005212   0.888    0.375    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 4.39 on 2006 degrees of freedom
  (70 observations deleted due to missingness)
Multiple R-squared:  0.0003927, Adjusted R-squared:  -0.0001056 
F-statistic: 0.7882 on 1 and 2006 DF,  p-value: 0.3748

>>>>>>> ca5a01703f207ba1e1c6466ecb3e4c110123f95f

Perform at least one relevant hypothesis test.

Two hypothesis tests were performed

The first hypothesis test was a two-tailed test to find the difference between between amount of males and females.

The second hypothesis test performed was a single-tailed hypothesis to see if the ages between rescued males and females differ.
The null hypothesis is mu_f - mu_m = 0 The alternative hypothesis is mu_f - mu_m < 0 The t-test is performed to find the difference between the two samples. After the t-test is run, the value is -3.176, meaning we reject the null hypothesis because the difference between males and females is not 0.

# Does the mean case time differ between search and rescue?
t.test(search$incident_time_elapsed,rescue$incident_time_elapsed,alternative = "two.sided",conf.level = .98)

# Does the mean case time differ between recovery and search?
t.test(recovery$incident_time_elapsed,search$incident_time_elapsed,alternative = "two.sided",conf.level = .98)
incident_model <- lm(incident_time_elapsed~number_of_rangers_involved, data = y)
incident_model
# intercept 1206.5
# slope 624.2 
# this means predicted time = 624.2 * rangers involved

#y %>% ggplot(aes(x = number_of_rangers_involved, y = incident_time_elapsed)) +
#  geom_point() +
#  geom_abline(intercept = 3.257e+00, slope = 8.195e-06 )
#incident_model$residuals
sum(incident_model$residuals^2)
summary(incident_model)

# Because p is less than alpha, we reject the null hypothesis. We have reason to believe that there is a linear relationship between incident time elapsed and number of rangers involved

Check the various assumptions of for statistical tests.

<<<<<<< HEAD

# predict the time to close a case with 3 rangers
predict(incident_model, newdata = data.frame(number_of_rangers_involved = 3))

# correlation between time elapsed and number of rangers for all types of incidents
y %>%
  ggplot(aes(x = incident_time_elapsed, y = number_of_rangers_involved, color = response_type)) +
  geom_point(size = 0.1) +
  facet_wrap(vars(response_type))

# looking at correlation for each response type
# there is a high correlation between time elapsed and number of rangers involved for fugitive search
# the other ones dont show a high correlation but this is kinda expected because there are lots of outliers
y %>%
  group_by(response_type) %>%
  summarize(r = cor(incident_time_elapsed, number_of_rangers_involved, use = "complete.obs"))


# incident model qq plot
plot(incident_model)
=======

Call:
lm(formula = number_of_rangers_involved ~ subject_age, data = raw_adk_data)

Residuals:
   Min     1Q Median     3Q    Max 
-2.536 -2.207 -1.240  0.590 80.700 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 3.142535   0.219316  14.329   <2e-16 ***
subject_age 0.004627   0.005212   0.888    0.375    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 4.39 on 2006 degrees of freedom
  (70 observations deleted due to missingness)
Multiple R-squared:  0.0003927, Adjusted R-squared:  -0.0001056 
F-statistic: 0.7882 on 1 and 2006 DF,  p-value: 0.3748

>>>>>>> ca5a01703f207ba1e1c6466ecb3e4c110123f95f

For the linear regression analysis, interpret coefficients and/or make relevant predictions and summarize their meaning.

<<<<<<< HEAD

raw_adk_data %>%
  group_by(response_type) %>%
  summarize(r = cor(x = subject_age, y = number_of_rangers_involved, use = "complete.obs"))
cor(raw_adk_data$subject_age,raw_adk_data$number_of_rangers_involved, use = "complete.obs")
=======
Warning: Removed 70 rows containing missing values (geom_point).

>>>>>>> ca5a01703f207ba1e1c6466ecb3e4c110123f95f

4 Conclusions

We were unable to find a demographic to target with an awareness campaign because of low statistical significance. From a common sense standpoint it would make sense to market more to hikers because they make up the vast majority of those in need of assistance but since we do not have data on how many people participate in each activity, we cannot definitively say that hikers need assistance at a higher rate than those in other activities. We could extend this study to the rest of New York State and even the rest of the United States, but not all regions are comparable due to differences in usage and common activities. What works in one area might not work elsewhere. One thing that would improve this study is more data and general usage data to compare rates of needed rescue in different demographics. The data on rescues during Covid would be especially interesting to look at since more people engaged with the outdoors. Specifically more inexperienced people. It would also be informative to have another variable in the study that qualitatively rates victim’s level of competence. …

References

Data.world https://data.world/data-ny-gov/u6hu-h7p5

<<<<<<< HEAD
LS0tDQp0aXRsZTogIlNlYXJjaCBhbmQgUmVzY3VlcyBpbiB0aGUgQWRpcm9uZGFja3MiDQphdXRob3I6ICJLcmlzdGluYSBGcmFua2xpbiwgUm9zaWUgRGVsd2ljaGUsIENvbm5vciBIYXRoYXdheSwgSmFja2llIEJ1ZGthIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQotLS0NCg0KIyBJbnRyb2R1Y3Rpb24NCg0KRXZlcnkgeWVhciwgdGhlIE5ldyBZb3JrIFN0YXRlIEZvcmVzdCBSYW5nZXJzIGhhdmUgdG8gcmVzY3VlIHBlb3BsZSB3aG8gdXNlIHRoZSBvdXRkb29ycyBmb3IgcmVjcmVhdGlvbi4gU29tZSBnZXQgaW5qdXJlZCBhbmQgbmVlZCBldmFjdWF0aW9uLCBzb21lIGdldCBsb3N0IGFuZCBuZWVkIHNlYXJjaCBhbmQgcmVzY3VlLCBidXQgYWxsIHB1dCBhIGJ1cmRlbiBvbiBvdXIgcGFyayBzZXJ2aWNlcyByZXNvdXJjZXMuIEFueSBlZmZvcnRzIHRvIGVkdWNhdGUgcGVvcGxlIG9uIGhvdyB0byBiZSBzYWZlciBhbmQgbW9yZSByZXNwb25zaWJsZSBpbiBuYXR1cmUgd2lsbCBnbyBhIGxvbmcgd2F5IHRvd2FyZHMgaGVscGluZyBhbGxldmlhdGUgdGhpcyBidXJkZW4gYnV0IHRoZSBEZXBhcnRtZW50IG9mIEVudmlyb25tZW50YWwgQ29uc2VydmF0aW9uIGRvZXMgbm90IGhhdmUgdGhlIHJlc291cmNlcyB0byBtYXJrZXQgdG8gZXZlcnlvbmUuIEluIG91ciBhbmFseXNpcywgd2Ugd2lsbCB0cnkgdG8gaWRlbnRpZnkgZ3JvdXBzIHRoYXQgYXJlIGF0IGEgZ3JlYXRlciByaXNrIG9mIG5lZWRpbmcgZXZhY3VhdGlvbiBzbyB3ZSBjYW4gbWFrZSBhIHJlY29tbWVuZGF0aW9uIG9uIHdoZXJlIGJlc3QgdG8gYWxsb2NhdGUgcmVzb3VyY2VzIG9uIGF3YXJlbmVzcy4gV2UgZGVjaWRlZCB0byBmb2N1cyBvbiB0aGUgQWRpcm9uZGFjayBQYXJrIGJlY2F1c2Ugb2YgdGhlIHJlZ2lvbidzIGhpZ2ggdHJhZmZpYyBhbmQgYWJpbGl0eSB0byBhdHRyYWN0IGluZXhwZXJpZW5jZWQgdmlzaXRvcnMuICYmJiZUaGUgdmFyaWFibGVzIG9mIGludGVyZXN0IGFyZSB0aGUgYW1vdW50IG9mIHJhbmdlcnMgaW52b2x2ZWQsIGFtb3VudCBvZiBwZW9wbGUgYmVpbmcgcmVzY3VlZCwgYWdlIGFuZCBnZW5kZXIgb2YgcmVzY3VlZCwgYW5kIHRoZSB0eXBlIG9mIGFjdGl2aXR5IHRoYXQgY2F1c2VkIHRoZSBhY2NpZGVudC4gV2Ugd2lsbCBiZSBhbmFseXppbmcgdGhlIHJlc2N1ZXMgaGFwcGVuaW5nIGluIHRoZSBBZGlyb25kYWNrIFBhcmsgdG8gdHJ5IHRvIGZpbmQgZ3JvdXBzIG9mIHBlb3BsZSB3aG8gYXJlIGF0IGEgZ3JlYXRlciByaXNrIG9mIG5lZWRpbmcgcmVzY3VlIGFuZCB3b3VsZCB0aGVyZWZvcmUgYmVuZWZpdCBtb3JlIGZyb20gdGFyZ2V0ZWQgYXdhcmVuZXNzIGNhbXBhaWducy4NCg0KLi4uDQoNCiMgQmFja2dyb3VuZA0KDQpUaGlzIGlzIG9ic2VydmF0aW9uYWwgZGF0YSBvcmlnaW5hbGx5IGZvdW5kIG9uIERhdGEgV29ybGQgKGh0dHBzOi8vZGF0YS53b3JsZC8pIGZyb20gdGhlIE5ZU0RFQyBvbiBmb3Jlc3QgcmFuZ2VyIGluY2lkZW50IHJlcG9ydHMuIEluIG9yZGVyIHRvIGhlbHAgdW5kZXJzdGFuZCB0aGUgZGF0YSBpdCB3b3VsZCBiZSBoZWxwZnVsIGZvciB0aGUgcmVhZGVyIHRvIGhhdmUgcHJldmlvdXMga25vd2xlZGdlIGFib3V0IHJlY3JlYXRpb25hbCBhY3Rpdml0aWVzIGluIE5ldyBZb3JrIFN0YXRlIGZvcmVzdHMgYW5kIHRoZSByaXNrcyBpbnZvbHZlZCB3aXRoIHRob3NlIGFjdGl2aXRpZXMuIA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHRpZHltb2RlbHMpDQpsaWJyYXJ5KGh0dHIpDQpsaWJyYXJ5KGpzb25saXRlKQ0KbGlicmFyeShzZikNCmxpYnJhcnkodG1hcCkNCmxpYnJhcnkgKHJlYWRyKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQp1cmxmaWxlPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vSmFCdWRrYS9TVEFUMzgzX0YyMS9Qcm9qZWN0L1NSX2RhdGEuY3N2Ig0KcmF3X3NyX2RhdGE8LXJlYWQuY3N2KHVybCh1cmxmaWxlKSkgJT4lDQogIGNsZWFuX25hbWVzKCkNCnJhd19hZGtfZGF0YSA8LSByYXdfc3JfZGF0YSAlPiUNCiAgZmlsdGVyKGluY2lkZW50X2FkaXJvbmRhY2tfcGFyayA9PSAidHJ1ZSIpDQpgYGANCi4uLg0KDQojIE1ldGhvZHMgYW5kIFJlc3VsdHMNCg0KVG8gaGVscCB1cyB2aXN1YWxpemUgdGhlIGxvY2F0aW9uIGZvdW5kIGRhdGEgd2UgY2FuIGxvb2sgYXQgYWxsIHRoZSBpbmNpZGVudHMgcGxvdHRlZCBvbiBhIG1hcCBvZiBOZXcgWW9yayBTdGF0ZSBhcyBzaG93biBpbiBzZWN0aW9uIDMuMS4gRnJvbSB2aXN1YWwgaW5zcGVjdGlvbiwgd2UgY2FuIHNlZSB0aGUgaGlnaGVzdCBkZW5zaXR5IG9mIHJlc2N1ZXMgb2NjdXIgaW4gdGhlIEFkaXJvbmRhY2tzLiBXZSBjYW4gdmVyaWZ5IHRoaXMgYnkgdXNpbmcgdGhlIHRhYmxlIGZ1bmN0aW9uIHRvIHN1bW1hcml6ZSB0aGUgcmVzdWx0cy4NCg0KYGBge3IgZWNobz1GQUxTRX0NCmNvdW50X2FkayA8LSAgdGFibGUocmF3X3NyX2RhdGFbJ2luY2lkZW50X2FkaXJvbmRhY2tfcGFyayddKQ0KICByb3duYW1lcyhjb3VudF9hZGspID0gYygiT3V0c2lkZSBBREsiLCAiSW5zaWRlIEFESyIpDQpjb3VudF9hZGsNCmBgYA0KDQojIyBMb2NhdGlvbiBGb3VuZCBvZiBhbGwgSW5jaWRlbnRzDQpgYGB7ciAgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnJhd19zcl9tYXAgPC0gcmF3X3NyX2RhdGFbY29tcGxldGUuY2FzZXMocmF3X3NyX2RhdGEpLCBdICU+JQ0Kc3RfYXNfc2YoY29vcmRzID0gYygibG9jYXRpb25fZm91bmRfbG9uZ2l0dWRlIiwgImxvY2F0aW9uX2ZvdW5kX2xhdGl0dWRlIiksIGNycyA9IDQzMjYpDQp0bWFwX21vZGUoInZpZXciKQ0KdG1fc2hhcGUocmF3X3NyX21hcCkgKw0KICB0bV9kb3RzKHNpemU9MC4wMixjb2w9InJlZCIsIGFscGhhID0gMC41KSArIHRtX2xlZ2VuZChvdXRzaWRlID0gVFJVRSkgDQpgYGANCg0KLi4uDQoNCk9uZSBvZiB0aGUgdmFyaWFibGVzIHdlIGZvY3VzZWQgdGhlIG1vc3Qgb24gd2FzIHRoZSBhZ2Ugb2YgdGhlIHJlc2N1ZWQuIFNlY3Rpb24gMy4yIGRpc3BsYXlzIHRoZSBsb2NhdGlvbiBmb3VuZCBkYXRhIGFnYWluIGJ5IHN1YmplY3QgYWdlIGV4Y2VwdCB0aGlzIHRpbWUganVzdCBmb3IgaW5jaWRlbnRzIHRoYXQgc3RhcnRlZCBpbiB0aGUgQWRpcm9uZGFjayBwYXJrLiBUaGVyZSBhcmUgYSBmZXcgb3V0bGllcnMgd2hlcmUgcGVvcGxlIHdlcmUgZm91bmQgb3V0c2lkZSB0aGUgcGFyay4gVGhlc2UgYXJlIGxpa2VseSBkdWUgdG8gdGhlIHBlcnNvbiBiZWluZyByZXBvcnRlZCBtaXNzaW5nIGJ1dCB0aGVuIGJlaW5nIGZvdW5kIGF0IGhvbWUuIA0KDQojIyBMb2NhdGlvbiBGb3VuZCBpbiBBZGlyb25kYWNrcyBHcm91cGVkIGJ5IEFnZQ0KYGBge3IgIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQphZGtfZ2VvbV9kYXRhIDwtIHJhd19hZGtfZGF0YVtjb21wbGV0ZS5jYXNlcyhyYXdfYWRrX2RhdGEpLCBdICU+JQ0Kc3RfYXNfc2YoY29vcmRzID0gYygibG9jYXRpb25fZm91bmRfbG9uZ2l0dWRlIiwgImxvY2F0aW9uX2ZvdW5kX2xhdGl0dWRlIiksIGNycyA9IDQzMjYpIA0KdG1hcF9tb2RlKCJ2aWV3IikNCnRtX3NoYXBlKGFka19nZW9tX2RhdGEpICsNCiAgdG1fZG90cyhzaXplPTAuMDIsY29sPSJzdWJqZWN0X2FnZSIsIGFscGhhID0gMC43LCBwYWxldHRlID0gIlNwZWN0cmFsIikNCmBgYA0KDQpUaGUgZGF0YSBmcmFtZSBjYW4gYmUgb3ZlcndoZWxtaW5nIHRvIGxvb2sgYXQuIEl0IGlzIGVhc2llciB0byBkaWdlc3Qgd2hlbiBzdW1tYXJpemVkIHdpdGggdGhlICJ0YWJsZSIgZnVuY3Rpb24uIFdlIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBiZXR0ZXIgdmlzdWFsaXplIHRoZSB2YXJpYWJsZXMgb2YgaW50ZXJlc3QuIA0KDQpTb21lIGluaXRpYWwgb2JzZXJ2YXRpb25zIGFyZSB0aGF0IG1vcmUgbWVuIG5lZWQgYXNzaXN0YW5jZSB0aGFuIHdvbWVuLCB0aGVyZSB3ZXJlIG1vcmUgc2VhcmNoZXMgdGhhbiByZXNjdWVzLCByZWNvdmVyaWVzLCBvciBmdWdpdGl2ZSBzZWFyY2hlcyBjb21iaW5lZCwgYW5kIHRoZSBtb3N0IGNvbW1vbiBhY3Rpdml0eSB0byBuZWVkIGFzc2lzdGFuY2Ugd2FzIGhpa2luZywgZm9sbG93ZWQgbm90IHNvIGNsb3NlbHkgYnkgYm9hdGluZy4NCg0KYGBge3IgZWNobz1GQUxTRX0NCmNvdW50X2dlbmRlciA8LSAgdGFibGUocmF3X2Fka19kYXRhWydzdWJqZWN0X2dlbmRlciddKQ0KY291bnRfZ2VuZGVyDQpjb3VudF9ydHlwZSA8LSB0YWJsZShyYXdfYWRrX2RhdGFbJ3Jlc3BvbnNlX3R5cGUnXSkNCmNvdW50X3J0eXBlDQpjb3VudF9hY3Rpdml0eSA8LSB0YWJsZShyYXdfYWRrX2RhdGFbJ2FjdGl2aXR5J10pDQpjb3VudF9hY3Rpdml0eQ0KDQpgYGANCg0KT3VyIGluaXRpYWwgZW5kZWF2b3Igd2FzIHRvIHNlZSBpZiB0aGVyZSB3YXMgYSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHN1YmplY3QgYWdlIGFuZCB0eXBlIG9mIHJlc3BvbnNlLiBGcm9tIG91ciBhbmFseXNpcyB3ZSBjb25jbHVkZWQgdGhhdCB0aGVyZSB3YXMgbm8gc3VjaCBjb3JyZWxhdGlvbi4gVGhlIGJveCBwbG90IGlzIGEgaGVscGZ1bCB2aXN1YWxpemF0aW9uIGJlY2F1c2UgDQoNClRoZXJlIHNlZW1zIHRvIGJlIGEgY29ycmVsYXRpb24gYmV0d2VlbiB0aGUgc3ViamVjdCdzIGFnZSBhbmQgd2hhdCB0eXBlIG9mIHJlc3BvbnNlIGlzIHR5cGljYWxseSBuZWVkZWQuICBJdCBjYW4gYmUgY29uY2x1ZGVkIHRoYXQgYXMgcGVvcGxlIGdldCBvbGRlciwgdGhleSBtYXkgYmVjb21lIG1vcmUgZmFtaWxpYXIgd2l0aCB0aGUgbGFuZCwgb3Igc2ltcGx5IGJlIG1vcmUgY2FyZWZ1bCB3aXRoIHRoZWlyIGFjdGl2aXRpZXMuICBTZWFyY2ggYW5kIFJlc2N1ZSByZXNwb25zZXMgYXJlIHRoZSBvbmx5IHR5cGUgdGhhdCBvY2N1ciBmb3IgcGVvcGxlIDMwIGFuZCB1bmRlciwgcHJvdmluZyB0aGF0IHRoZSB5b3VuZ2VyIHBlb3BsZSBzaG91bGQgcHJvYmFibHkgaGF2ZSBtb3JlIHRyYWluaW5nIG9uIGNlcnRhaW4gc2tpbGxzIGJlZm9yZSB0cmF2ZWxpbmcgaW50byB0aGUgbW91bnRhaW5zIGFsb25lLiAgQWx0aG91Z2gsIHRoZSBtZWFuIGlzIGFyb3VuZCAzNSB0byA0MCB5ZWFycyBvbGQsIG1lYW5pbmcgdGhhdCBtb3N0bHkgcGVvcGxlIG92ZXIgMzAgYXJlIG1vcmUgY29tbW9uIGluIGdlbmVyYWwgaW4gdGhlIGFyZWEsIGFuZCB0aGVyZWZvcmUgbmVlZGluZyB0aGUgaGVscCBqdXN0IGFzIG11Y2guICBPdmVyYWxsIGFsbCBwZW9wbGUgdHJhdmVyc2luZyBpbnRvIHRoZSBtb3VudGFpbnMgc2hvdWxkIGhhdmUgYmV0dGVyIHNhZmV0eSBhd2FyZW5lc3MgYmVmb3JlIGdvaW5nIG91dCBhbG9uZSwgaW4gY2FzZSBhbnkgcHJvYmxlbXMgb2NjdXIuDQpBbm90aGVyIGltcG9ydGFudCBwb2ludCB0byBtYWtlIGFib3V0IHRoaXMgZGF0YSBpcyB0aGUgbm90aWNlYWJsZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIG9sZGVyIHBlb3BsZSBhbmQgcmVjb3ZlcnkuICBBcyB3ZSBhbGwga25vdywgYXMgd2UgYWdlIG91ciBib2RpZXMgYXJlIG5vdCBhcyBjYXBhYmxlIGFzIHRoZXkgdXNlZCB0byBiZSwgbWVhbmluZyB0aGV5IGFyZSBtb3JlIGxpa2VseSB0byBiZSBpbmp1cmVkLCBjYXVzaW5nIGEgbmVlZCB0byBiZSByZXNjdWVkLiAgT25lIHdheSB0byBkZWNyZWFzZSB0aGUgbmVlZCBmb3IgcmVzY3VlcyBjb3VsZCBiZSBleHRyYSB0cmFpbmluZyBhYm91dCBzYWZldHkgcHJlY2F1dGlvbnMgYW5kIGdpdmUgZmFpciB3YXJuaW5ncyBhYm91dCBjZXJ0YWluIGFjdGl2aXRpZXMuICBGb3IgZXhhbXBsZSBpZiBhIGhpa2UgaGFzIG9uZSBhcmVhIHRoYXQgZ2V0cyBzbGlwcGVyeSBiZWZvcmUgdGhlIHJlc3QsIHB1dCB1cCBtb3JlIHNpZ25zIG9yIG1ha2Ugc3VyZSBpdCBpcyBtZW50aW9uZWQgYmVmb3JlIGFueW9uZSBldmVuIGJlZ2lucyB0aGUgZXhjdXJzaW9uLg0KYGBge3IgZWNobz1GQUxTRX0NCnJhd19hZGtfZGF0YSAlPiUgDQogIGdncGxvdChhZXMoeSA9IHN1YmplY3RfYWdlLCB4ID0gcmVzcG9uc2VfdHlwZSkpICsNCiAgZ2VvbV9ib3hwbG90KCkrDQogIGdndGl0bGUoIlN1YmplY3QgQWdlIHZzIFJlc3BvbnNlIFR5cGUiKSANCmBgYA0KDQoNCmBgYHtyIGVjaG89RkFMU0V9DQpzZWFyY2hfZGF0YSA8LSByYXdfYWRrX2RhdGEgJT4lDQogIGZpbHRlcihyZXNwb25zZV90eXBlPT0iU2VhcmNoIikNCnJlc2N1ZV9kYXRhIDwtIHJhd19hZGtfZGF0YSAlPiUNCiAgZmlsdGVyKHJlc3BvbnNlX3R5cGU9PSJSZXNjdWUiKQ0KcmVjb3ZlcnlfZGF0YSA8LSByYXdfYWRrX2RhdGEgJT4lDQogIGZpbHRlcihyZXNwb25zZV90eXBlPT0iUmVjb3ZlcnkiKQ0KTUFyZWNvdmVyeSA8LSBtZWFuKHJlY292ZXJ5X2RhdGEkc3ViamVjdF9hZ2UsIG5hLnJtID0gIlRSVUUiKQ0KTUFyZXNjdWUgPC0gbWVhbihyZXNjdWVfZGF0YSRzdWJqZWN0X2FnZSwgbmEucm0gPSAiVFJVRSIpDQpNQXNlYXJjaCA8LSBtZWFuKHNlYXJjaF9kYXRhJHN1YmplY3RfYWdlLCBuYS5ybSA9ICJUUlVFIikNCmNhdCgnTWVhbiBhZ2VzDQpSZWNvdmVyeT0gJyxNQXJlY292ZXJ5KQ0KY2F0KCcNClJlc2N1ZT0gJyxNQXJlc2N1ZSkNCmNhdCgnDQpTZWFyY2g9ICcsTUFzZWFyY2gpDQpgYGANCg0KYGBge3J9DQptZWFuKHkkaW5jaWRlbnRfdGltZV9lbGFwc2VkKQ0KDQpzZWFyY2ggPC0geSAlPiUNCiAgZmlsdGVyKHJlc3BvbnNlX3R5cGU9PSJTZWFyY2giKQ0KcmVzY3VlIDwtIHkgJT4lDQogIGZpbHRlcihyZXNwb25zZV90eXBlPT0iUmVzY3VlIikNCnJlY292ZXJ5IDwtIHkgJT4lDQogIGZpbHRlcihyZXNwb25zZV90eXBlPT0iUmVjb3ZlcnkiKQ0KDQpyZXYgPC0gbWVhbihzZWFyY2gkaW5jaWRlbnRfdGltZV9lbGFwc2VkLCBuYS5ybSA9ICJUUlVFIikNCnJlcyA8LSBtZWFuKHJlc2N1ZSRpbmNpZGVudF90aW1lX2VsYXBzZWQsIG5hLnJtID0gIlRSVUUiKQ0Kc2VhIDwtIG1lYW4ocmVjb3ZlcnkkaW5jaWRlbnRfdGltZV9lbGFwc2VkLCBuYS5ybSA9ICJUUlVFIikNCmNhdCgnTWVhbiBpbmNpZGVudCB0aW1lIGVsYXBzZWQNClJlY292ZXJ5PSAnLHJldikNCmNhdCgnDQpSZXNjdWU9ICcscmVzKQ0KY2F0KCcNClNlYXJjaD0gJyxzZWEpDQpgYGANCg0KDQpQZXJmb3JtIGF0IGxlYXN0IG9uZSByZWxldmFudCBoeXBvdGhlc2lzIHRlc3QuIA0KDQoNClR3byBoeXBvdGhlc2lzIHRlc3RzIHdlcmUgcGVyZm9ybWVkDQoNClRoZSBmaXJzdCBoeXBvdGhlc2lzIHRlc3Qgd2FzIGEgdHdvLXRhaWxlZCB0ZXN0IHRvIGZpbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBiZXR3ZWVuIGFtb3VudCBvZiBtYWxlcyBhbmQgZmVtYWxlcy4NCg0KYGBge3IgZWNobz1GQUxTRX0NCmZlbWFsZSA8LSByYXdfYWRrX2RhdGEgJT4lDQogIGZpbHRlcihzdWJqZWN0X2dlbmRlciA9PSAiRiIpDQoNCm1hbGUgPC0gcmF3X2Fka19kYXRhICU+JQ0KICBmaWx0ZXIoc3ViamVjdF9nZW5kZXIgPT0gIk0iKQ0KDQpoMSA8LSB0LnRlc3QoZmVtYWxlJHN1YmplY3RfYWdlLCBtYWxlJHN1YmplY3RfYWdlLCBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiLCB2YXIuZXF1YWwgPSBGQUxTRSkNCmgxDQpgYGANCg0KVGhlIHNlY29uZCBoeXBvdGhlc2lzIHRlc3QgcGVyZm9ybWVkIHdhcyBhIHNpbmdsZS10YWlsZWQgaHlwb3RoZXNpcyB0byBzZWUgaWYgdGhlIGFnZXMgYmV0d2VlbiByZXNjdWVkIG1hbGVzIGFuZCBmZW1hbGVzIGRpZmZlci4gIA0KVGhlIG51bGwgaHlwb3RoZXNpcyBpcyBtdV9mIC0gbXVfbSA9IDANClRoZSBhbHRlcm5hdGl2ZSBoeXBvdGhlc2lzIGlzIG11X2YgLSBtdV9tIDwgMA0KVGhlIHQtdGVzdCBpcyBwZXJmb3JtZWQgdG8gZmluZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gc2FtcGxlcy4NCkFmdGVyIHRoZSB0LXRlc3QgaXMgcnVuLCB0aGUgdmFsdWUgaXMgLTMuMTc2LCBtZWFuaW5nIHdlIHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzIGJlY2F1c2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBtYWxlcyBhbmQgZmVtYWxlcyBpcyBub3QgMC4NCg0KYGBge3IgZWNobz1GQUxTRX0NCg0KZmVtYWxlIDwtIHJhd19hZGtfZGF0YSAlPiUNCiAgZmlsdGVyKHN1YmplY3RfZ2VuZGVyID09ICJGIikNCg0KbWFsZSA8LSByYXdfYWRrX2RhdGEgJT4lDQogIGZpbHRlcihzdWJqZWN0X2dlbmRlciA9PSAiTSIpDQoNCmgyIDwtIHQudGVzdChmZW1hbGUkc3ViamVjdF9hZ2UsIG1hbGUkc3ViamVjdF9hZ2UsIGFsdGVybmF0aXZlID0gImxlc3MiLCB2YXIuZXF1YWwgPSBGQUxTRSkNCmgyDQoNCmBgYA0KDQpgYGB7cn0NCiMgRG9lcyB0aGUgbWVhbiBjYXNlIHRpbWUgZGlmZmVyIGJldHdlZW4gc2VhcmNoIGFuZCByZXNjdWU/DQp0LnRlc3Qoc2VhcmNoJGluY2lkZW50X3RpbWVfZWxhcHNlZCxyZXNjdWUkaW5jaWRlbnRfdGltZV9lbGFwc2VkLGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIsY29uZi5sZXZlbCA9IC45OCkNCg0KIyBEb2VzIHRoZSBtZWFuIGNhc2UgdGltZSBkaWZmZXIgYmV0d2VlbiByZWNvdmVyeSBhbmQgc2VhcmNoPw0KdC50ZXN0KHJlY292ZXJ5JGluY2lkZW50X3RpbWVfZWxhcHNlZCxzZWFyY2gkaW5jaWRlbnRfdGltZV9lbGFwc2VkLGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIsY29uZi5sZXZlbCA9IC45OCkNCg0KYGBgDQpgYGB7cn0NCmluY2lkZW50X21vZGVsIDwtIGxtKGluY2lkZW50X3RpbWVfZWxhcHNlZH5udW1iZXJfb2ZfcmFuZ2Vyc19pbnZvbHZlZCwgZGF0YSA9IHkpDQppbmNpZGVudF9tb2RlbA0KIyBpbnRlcmNlcHQgMTIwNi41DQojIHNsb3BlIDYyNC4yIA0KIyB0aGlzIG1lYW5zIHByZWRpY3RlZCB0aW1lID0gNjI0LjIgKiByYW5nZXJzIGludm9sdmVkDQpgYGANCg0KYGBge3J9DQoNCiN5ICU+JSBnZ3Bsb3QoYWVzKHggPSBudW1iZXJfb2ZfcmFuZ2Vyc19pbnZvbHZlZCwgeSA9IGluY2lkZW50X3RpbWVfZWxhcHNlZCkpICsNCiMgIGdlb21fcG9pbnQoKSArDQojICBnZW9tX2FibGluZShpbnRlcmNlcHQgPSAzLjI1N2UrMDAsIHNsb3BlID0gOC4xOTVlLTA2ICkNCiNpbmNpZGVudF9tb2RlbCRyZXNpZHVhbHMNCnN1bShpbmNpZGVudF9tb2RlbCRyZXNpZHVhbHNeMikNCnN1bW1hcnkoaW5jaWRlbnRfbW9kZWwpDQoNCiMgQmVjYXVzZSBwIGlzIGxlc3MgdGhhbiBhbHBoYSwgd2UgcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMuIFdlIGhhdmUgcmVhc29uIHRvIGJlbGlldmUgdGhhdCB0aGVyZSBpcyBhIGxpbmVhciByZWxhdGlvbnNoaXAgYmV0d2VlbiBpbmNpZGVudCB0aW1lIGVsYXBzZWQgYW5kIG51bWJlciBvZiByYW5nZXJzIGludm9sdmVkDQpgYGANCg0KDQoNCkNoZWNrIHRoZSB2YXJpb3VzIGFzc3VtcHRpb25zIG9mIGZvciBzdGF0aXN0aWNhbCB0ZXN0cy4NCg0KYGBge3IgZWNobz1GQUxTRX0NCm1vZGVsID0gbG0obnVtYmVyX29mX3JhbmdlcnNfaW52b2x2ZWQgfiBzdWJqZWN0X2FnZSwgZGF0YSA9IHJhd19hZGtfZGF0YSkNCnN1bW1hcnkobW9kZWwpDQpwbG90KG1vZGVsKQ0KYGBgDQoNCmBgYHtyfQ0KDQojIHByZWRpY3QgdGhlIHRpbWUgdG8gY2xvc2UgYSBjYXNlIHdpdGggMyByYW5nZXJzDQpwcmVkaWN0KGluY2lkZW50X21vZGVsLCBuZXdkYXRhID0gZGF0YS5mcmFtZShudW1iZXJfb2ZfcmFuZ2Vyc19pbnZvbHZlZCA9IDMpKQ0KDQojIGNvcnJlbGF0aW9uIGJldHdlZW4gdGltZSBlbGFwc2VkIGFuZCBudW1iZXIgb2YgcmFuZ2VycyBmb3IgYWxsIHR5cGVzIG9mIGluY2lkZW50cw0KeSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gaW5jaWRlbnRfdGltZV9lbGFwc2VkLCB5ID0gbnVtYmVyX29mX3JhbmdlcnNfaW52b2x2ZWQsIGNvbG9yID0gcmVzcG9uc2VfdHlwZSkpICsNCiAgZ2VvbV9wb2ludChzaXplID0gMC4xKSArDQogIGZhY2V0X3dyYXAodmFycyhyZXNwb25zZV90eXBlKSkNCg0KIyBsb29raW5nIGF0IGNvcnJlbGF0aW9uIGZvciBlYWNoIHJlc3BvbnNlIHR5cGUNCiMgdGhlcmUgaXMgYSBoaWdoIGNvcnJlbGF0aW9uIGJldHdlZW4gdGltZSBlbGFwc2VkIGFuZCBudW1iZXIgb2YgcmFuZ2VycyBpbnZvbHZlZCBmb3IgZnVnaXRpdmUgc2VhcmNoDQojIHRoZSBvdGhlciBvbmVzIGRvbnQgc2hvdyBhIGhpZ2ggY29ycmVsYXRpb24gYnV0IHRoaXMgaXMga2luZGEgZXhwZWN0ZWQgYmVjYXVzZSB0aGVyZSBhcmUgbG90cyBvZiBvdXRsaWVycw0KeSAlPiUNCiAgZ3JvdXBfYnkocmVzcG9uc2VfdHlwZSkgJT4lDQogIHN1bW1hcml6ZShyID0gY29yKGluY2lkZW50X3RpbWVfZWxhcHNlZCwgbnVtYmVyX29mX3JhbmdlcnNfaW52b2x2ZWQsIHVzZSA9ICJjb21wbGV0ZS5vYnMiKSkNCg0KDQojIGluY2lkZW50IG1vZGVsIHFxIHBsb3QNCnBsb3QoaW5jaWRlbnRfbW9kZWwpDQoNCmBgYA0KDQoNCg0KDQoNCkZvciB0aGUgbGluZWFyIHJlZ3Jlc3Npb24gYW5hbHlzaXMsIGludGVycHJldCBjb2VmZmljaWVudHMgYW5kL29yIG1ha2UgcmVsZXZhbnQgcHJlZGljdGlvbnMgYW5kDQpzdW1tYXJpemUgdGhlaXIgbWVhbmluZy4NCg0KYGBge3IgZWNobz1GQUxTRX0NCnJhd19hZGtfZGF0YSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHN1YmplY3RfYWdlLCB5ID0gbnVtYmVyX29mX3JhbmdlcnNfaW52b2x2ZWQpKSsNCiAgZ2VvbV9wb2ludCgpKw0KICBnZW9tX2FibGluZShpbnRlcmNlcHQgPSAzLjE0MjUzNSwgc2xvcGUgPSAwLjAwNDYyNywgY29sPSJtYWdlbnRhIikrDQogIGdndGl0bGUoIlJhbmdlcnMgdG8gQWdlIFJlZ3Jlc3Npb24iKSANCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0KY29yKHJhd19hZGtfZGF0YSRzdWJqZWN0X2FnZSxyYXdfYWRrX2RhdGEkbnVtYmVyX29mX3JhbmdlcnNfaW52b2x2ZWQsIHVzZSA9ICJjb21wbGV0ZS5vYnMiKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0V9DQp4IDwtIGxtKGZvcm11bGEgPSBudW1iZXJfb2ZfcmFuZ2Vyc19pbnZvbHZlZCB+IHN1YmplY3RfYWdlLGRhdGE9cmF3X2Fka19kYXRhKQ0Kc3VtbWFyeSh4KQ0KYGBgDQoNCmBgYHtyfQ0KDQpyYXdfYWRrX2RhdGEgJT4lDQogIGdyb3VwX2J5KHJlc3BvbnNlX3R5cGUpICU+JQ0KICBzdW1tYXJpemUociA9IGNvcih4ID0gc3ViamVjdF9hZ2UsIHkgPSBudW1iZXJfb2ZfcmFuZ2Vyc19pbnZvbHZlZCwgdXNlID0gImNvbXBsZXRlLm9icyIpKQ0KYGBgDQoNCmBgYHtyfQ0KY29yKHJhd19hZGtfZGF0YSRzdWJqZWN0X2FnZSxyYXdfYWRrX2RhdGEkbnVtYmVyX29mX3JhbmdlcnNfaW52b2x2ZWQsIHVzZSA9ICJjb21wbGV0ZS5vYnMiKQ0KYGBgDQoNCi4uLg0KDQoNCiMgQ29uY2x1c2lvbnMNCg0KV2Ugd2VyZSB1bmFibGUgdG8gZmluZCBhIGRlbW9ncmFwaGljIHRvIHRhcmdldCB3aXRoIGFuIGF3YXJlbmVzcyBjYW1wYWlnbiBiZWNhdXNlIG9mIGxvdyBzdGF0aXN0aWNhbCBzaWduaWZpY2FuY2UuIEZyb20gYSBjb21tb24gc2Vuc2Ugc3RhbmRwb2ludCBpdCB3b3VsZCBtYWtlIHNlbnNlIHRvIG1hcmtldCBtb3JlIHRvIGhpa2VycyBiZWNhdXNlIHRoZXkgbWFrZSB1cCB0aGUgdmFzdCBtYWpvcml0eSBvZiB0aG9zZSBpbiBuZWVkIG9mIGFzc2lzdGFuY2UgYnV0IHNpbmNlIHdlIGRvIG5vdCBoYXZlIGRhdGEgb24gaG93IG1hbnkgcGVvcGxlIHBhcnRpY2lwYXRlIGluIGVhY2ggYWN0aXZpdHksIHdlIGNhbm5vdCBkZWZpbml0aXZlbHkgc2F5IHRoYXQgaGlrZXJzIG5lZWQgYXNzaXN0YW5jZSBhdCBhIGhpZ2hlciByYXRlIHRoYW4gdGhvc2UgaW4gb3RoZXIgYWN0aXZpdGllcy4gV2UgY291bGQgZXh0ZW5kIHRoaXMgc3R1ZHkgdG8gdGhlIHJlc3Qgb2YgTmV3IFlvcmsgU3RhdGUgYW5kIGV2ZW4gdGhlIHJlc3Qgb2YgdGhlIFVuaXRlZCBTdGF0ZXMsIGJ1dCBub3QgYWxsIHJlZ2lvbnMgYXJlIGNvbXBhcmFibGUgZHVlIHRvIGRpZmZlcmVuY2VzIGluIHVzYWdlIGFuZCBjb21tb24gYWN0aXZpdGllcy4gV2hhdCB3b3JrcyBpbiBvbmUgYXJlYSBtaWdodCBub3Qgd29yayBlbHNld2hlcmUuIA0KT25lIHRoaW5nIHRoYXQgd291bGQgaW1wcm92ZSB0aGlzIHN0dWR5IGlzIG1vcmUgZGF0YSBhbmQgZ2VuZXJhbCB1c2FnZSBkYXRhIHRvIGNvbXBhcmUgcmF0ZXMgb2YgbmVlZGVkIHJlc2N1ZSBpbiBkaWZmZXJlbnQgZGVtb2dyYXBoaWNzLiBUaGUgZGF0YSBvbiByZXNjdWVzIGR1cmluZyBDb3ZpZCB3b3VsZCBiZSBlc3BlY2lhbGx5IGludGVyZXN0aW5nIHRvIGxvb2sgYXQgc2luY2UgbW9yZSBwZW9wbGUgZW5nYWdlZCB3aXRoIHRoZSBvdXRkb29ycy4gU3BlY2lmaWNhbGx5IG1vcmUgaW5leHBlcmllbmNlZCBwZW9wbGUuIEl0IHdvdWxkIGFsc28gYmUgaW5mb3JtYXRpdmUgdG8gaGF2ZSBhbm90aGVyIHZhcmlhYmxlIGluIHRoZSBzdHVkeSB0aGF0IHF1YWxpdGF0aXZlbHkgcmF0ZXMgdmljdGltJ3MgbGV2ZWwgb2YgY29tcGV0ZW5jZS4gDQouLi4NCg0KDQojIFJlZmVyZW5jZXMgey19DQoNCkRhdGEud29ybGQNCmh0dHBzOi8vZGF0YS53b3JsZC9kYXRhLW55LWdvdi91Nmh1LWg3cDUNCg==
=======
LS0tDQp0aXRsZTogIlNlYXJjaCBhbmQgUmVzY3VlcyBpbiB0aGUgQWRpcm9uZGFja3MiDQphdXRob3I6ICJLcmlzdGluYSBGcmFua2xpbiwgUm9zaWUgRGVsd2ljaGUsIENvbm5vciBIYXRoYXdheSwgSmFja2llIEJ1ZGthIg0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazoNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCi0tLQ0KDQojIEludHJvZHVjdGlvbg0KDQpFdmVyeSB5ZWFyLCB0aGUgTmV3IFlvcmsgU3RhdGUgRm9yZXN0IFJhbmdlcnMgaGF2ZSB0byByZXNjdWUgcGVvcGxlIHdobyB1c2UgdGhlIG91dGRvb3JzIGZvciByZWNyZWF0aW9uLiBTb21lIGdldCBpbmp1cmVkIGFuZCBuZWVkIGV2YWN1YXRpb24sIHNvbWUgZ2V0IGxvc3QgYW5kIG5lZWQgc2VhcmNoIGFuZCByZXNjdWUsIGJ1dCBhbGwgcHV0IGEgYnVyZGVuIG9uIG91ciBwYXJrIHNlcnZpY2VzIHJlc291cmNlcy4gQW55IGVmZm9ydHMgdG8gZWR1Y2F0ZSBwZW9wbGUgb24gaG93IHRvIGJlIHNhZmVyIGFuZCBtb3JlIHJlc3BvbnNpYmxlIGluIG5hdHVyZSB3aWxsIGdvIGEgbG9uZyB3YXkgdG93YXJkcyBoZWxwaW5nIGFsbGV2aWF0ZSB0aGlzIGJ1cmRlbiBidXQgdGhlIERlcGFydG1lbnQgb2YgRW52aXJvbm1lbnRhbCBDb25zZXJ2YXRpb24gZG9lcyBub3QgaGF2ZSB0aGUgcmVzb3VyY2VzIHRvIG1hcmtldCB0byBldmVyeW9uZS4gSW4gb3VyIGFuYWx5c2lzLCB3ZSB3aWxsIHRyeSB0byBpZGVudGlmeSBncm91cHMgdGhhdCBhcmUgYXQgYSBncmVhdGVyIHJpc2sgb2YgbmVlZGluZyBldmFjdWF0aW9uIHNvIHdlIGNhbiBtYWtlIGEgcmVjb21tZW5kYXRpb24gb24gd2hlcmUgYmVzdCB0byBhbGxvY2F0ZSByZXNvdXJjZXMgb24gYXdhcmVuZXNzLiBXZSBkZWNpZGVkIHRvIGZvY3VzIG9uIHRoZSBBZGlyb25kYWNrIFBhcmsgYmVjYXVzZSBvZiB0aGUgcmVnaW9uJ3MgaGlnaCB0cmFmZmljIGFuZCBhYmlsaXR5IHRvIGF0dHJhY3QgaW5leHBlcmllbmNlZCB2aXNpdG9ycy4gJiYmJlRoZSB2YXJpYWJsZXMgb2YgaW50ZXJlc3QgYXJlIHRoZSBhbW91bnQgb2YgcmFuZ2VycyBpbnZvbHZlZCwgYW1vdW50IG9mIHBlb3BsZSBiZWluZyByZXNjdWVkLCBhZ2UgYW5kIGdlbmRlciBvZiByZXNjdWVkLCBhbmQgdGhlIHR5cGUgb2YgYWN0aXZpdHkgdGhhdCBjYXVzZWQgdGhlIGFjY2lkZW50LiBXZSB3aWxsIGJlIGFuYWx5emluZyB0aGUgcmVzY3VlcyBoYXBwZW5pbmcgaW4gdGhlIEFkaXJvbmRhY2sgUGFyayB0byB0cnkgdG8gZmluZCBncm91cHMgb2YgcGVvcGxlIHdobyBhcmUgYXQgYSBncmVhdGVyIHJpc2sgb2YgbmVlZGluZyByZXNjdWUgYW5kIHdvdWxkIHRoZXJlZm9yZSBiZW5lZml0IG1vcmUgZnJvbSB0YXJnZXRlZCBhd2FyZW5lc3MgY2FtcGFpZ25zLg0KDQouLi4NCg0KIyBCYWNrZ3JvdW5kDQoNClRoaXMgaXMgb2JzZXJ2YXRpb25hbCBkYXRhIG9yaWdpbmFsbHkgZm91bmQgb24gRGF0YSBXb3JsZCAoaHR0cHM6Ly9kYXRhLndvcmxkLykgZnJvbSB0aGUgTllTREVDIG9uIGZvcmVzdCByYW5nZXIgaW5jaWRlbnQgcmVwb3J0cy4gSW4gb3JkZXIgdG8gaGVscCB1bmRlcnN0YW5kIHRoZSBkYXRhIGl0IHdvdWxkIGJlIGhlbHBmdWwgZm9yIHRoZSByZWFkZXIgdG8gaGF2ZSBwcmV2aW91cyBrbm93bGVkZ2UgYWJvdXQgcmVjcmVhdGlvbmFsIGFjdGl2aXRpZXMgaW4gTmV3IFlvcmsgU3RhdGUgZm9yZXN0cyBhbmQgdGhlIHJpc2tzIGludm9sdmVkIHdpdGggdGhvc2UgYWN0aXZpdGllcy4gDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGphbml0b3IpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkodGlkeW1vZGVscykNCmxpYnJhcnkoaHR0cikNCmxpYnJhcnkoanNvbmxpdGUpDQpsaWJyYXJ5KHNmKQ0KbGlicmFyeSh0bWFwKQ0KbGlicmFyeSAocmVhZHIpDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnVybGZpbGU9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9KYUJ1ZGthL1NUQVQzODNfRjIxL1Byb2plY3QvU1JfZGF0YS5jc3YiDQpyYXdfc3JfZGF0YTwtcmVhZF9jc3YodXJsKHVybGZpbGUpKSAlPiUNCiAgY2xlYW5fbmFtZXMoKQ0KcmF3X2Fka19kYXRhIDwtIHJhd19zcl9kYXRhICU+JQ0KICBmaWx0ZXIoaW5jaWRlbnRfYWRpcm9uZGFja19wYXJrID09ICJ0cnVlIikNCmBgYA0KLi4uDQoNCiMgTWV0aG9kcyBhbmQgUmVzdWx0cw0KDQpUbyBoZWxwIHVzIHZpc3VhbGlzZSB0aGUgZGF0YSB3ZSBjYW4gbG9vayBhdCBhbGwgdGhlIGluY2lkZW50cyBwbG90dGVkIG9uIGEgbWFwIG9mIE5ldyBZb3JrIFN0YXRlIGFzIHNob3duIGluIHNlY3Rpb24gMy4xLiBGcm9tIHZpc3VhbCBpbnNwZWN0aW9uLCB3ZSBjYW4gc2VlIHRoZSBoaWdoZXN0IGRlbnNpdHkgb2YgcmVzY3VlcyBvY2N1ciBpbiB0aGUgQWRpcm9uZGFja3MuIFdlIGNhbiB2ZXJpZnkgdGhpcyBieSB1c2luZyB0aGUgdGFibGUgZnVuY3Rpb24gdG8gc3VtbWFyaXplIHRoZSByZXN1bHRzLg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmNvdW50X2FkayA8LSAgdGFibGUocmF3X3NyX2RhdGFbJ2luY2lkZW50X2FkaXJvbmRhY2tfcGFyayddKQ0KICByb3duYW1lcyhjb3VudF9hZGspID0gYygiT3V0c2lkZSBBREsiLCAiSW5zaWRlIEFESyIpDQpWaWV3KGNvdW50X2FkaykNCmBgYA0KDQoNClRoZSB0d28gcGxvdHMgYmVsb3cgYXJlIGNyZWF0ZWQgZnJvbSBsb2NhdGlvbiBvZiB0aGUgcmVzY3VlcyB3aXRoaW4gTmV3IFlvcmsgU3RhdGUuICBMb29raW5nIGF0IHRoZSBwbG90IG9mIHRoZSBlbnRpcmUgc3RhdGUsIHRoZXJlIGFyZSB0d28gcmVnaW9ucyB3aGVyZSByZXNjdWVzIG9jY3VyIG1vcmUgZnJlcXVlbnRseSwgdGhlIGhpZ2ggcGVha3MgYmVpbmcgdGhlIGxhcmdlciBhcmVhIG9mIGNvbmNlbnRyYXRpb24uICBCZWNhdXNlIG9mIHRoaXMgY29uY2VudHJhdGlvbiwgYSBzZWNvbmQgcGxvdCB3YXMgbWFkZSB0byBmb2N1cyBvbiB0aGUgcmVzY3VlcyB3aXRoaW4gdGhlIEFkaXJvbmRhY2sgbW91bnRhaW5zLiANCg0KIyMgTG9jYXRpb24gRm91bmQgb2YgYWxsIEluY2lkZW50cw0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCnJhd19zcl9tYXAgPC0gcmF3X3NyX2RhdGFbY29tcGxldGUuY2FzZXMocmF3X3NyX2RhdGEpLCBdICU+JQ0Kc3RfYXNfc2YoY29vcmRzID0gYygibG9jYXRpb25fZm91bmRfbG9uZ2l0dWRlIiwgImxvY2F0aW9uX2ZvdW5kX2xhdGl0dWRlIiksIGNycyA9IDQzMjYpDQp0bWFwX21vZGUoInZpZXciKQ0KdG1fc2hhcGUocmF3X3NyX21hcCkgKw0KICB0bV9kb3RzKHNpemU9MC4wMixjb2w9InJlZCIsIGFscGhhID0gMC41KSArIHRtX2xlZ2VuZChvdXRzaWRlID0gVFJVRSkgDQpgYGANCiMjIExvY2F0aW9uIEZvdW5kIGluIEFkaXJvbmRhY2tzIEdyb3VwZWQgYnkgQWdlDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KYWRrX2dlb21fZGF0YSA8LSByYXdfYWRrX2RhdGFbY29tcGxldGUuY2FzZXMocmF3X2Fka19kYXRhKSwgXSAlPiUNCnN0X2FzX3NmKGNvb3JkcyA9IGMoImxvY2F0aW9uX2ZvdW5kX2xvbmdpdHVkZSIsICJsb2NhdGlvbl9mb3VuZF9sYXRpdHVkZSIpLCBjcnMgPSA0MzI2KSANCnRtYXBfbW9kZSgidmlldyIpDQp0bV9zaGFwZShhZGtfZ2VvbV9kYXRhKSArDQogIHRtX2RvdHMoc2l6ZT0wLjAyLGNvbD0ic3ViamVjdF9hZ2UiLCBhbHBoYSA9IDAuNywgcGFsZXR0ZSA9ICJTcGVjdHJhbCIpDQpgYGANClRoZSBkYXRhIGhhcyBtYW55IGRpZmZlcmVudCB2YXJpYWJsZXMgYW5kIHByZXNlbnRlZCB0byB1cyBpbiBhIGxhcmdlIGNvbmZ1c2luZyB0YWJsZS4gIFRoZSBmb2xsb3dpbmcgY29kZSBzb3J0cyB0aGUgdmFyaWFibGVzIHdlIGFyZSBpbnRlcmVzdGVkIGluLCBhbmQgY3JlYXRlcyBhIHNtYWxsIHRhYmxlIGZvciBlYWNoIG9uZS4NCg0KQXMgeW91IGNhbiBzZWUsIHRoZXJlIGlzIG1vcmUgY2hhaW5zYXcgdGhlbiBmbG9vZCB2aWN0aW1zLg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KY291bnRfZ2VuZGVyIDwtICB0YWJsZShyYXdfYWRrX2RhdGFbJ3N1YmplY3RfZ2VuZGVyJ10pDQpjb3VudF9nZW5kZXINCmNvdW50X3J0eXBlIDwtIHRhYmxlKHJhd19hZGtfZGF0YVsncmVzcG9uc2VfdHlwZSddKQ0KY291bnRfcnR5cGUNCmNvdW50X2FjdGl2aXR5IDwtIHRhYmxlKHJhd19hZGtfZGF0YVsnYWN0aXZpdHknXSkNCmNvdW50X2FjdGl2aXR5DQoNCmBgYA0KDQpDaGVjayBjb3JyZWxhdGlvbiBiZXR3ZWVuIHZhcmlhYmxlcy4gDQoNCg0KVGhlcmUgc2VlbXMgdG8gYmUgYSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHRoZSBzdWJqZWN0J3MgYWdlIGFuZCB3aGF0IHR5cGUgb2YgcmVzcG9uc2UgaXMgdHlwaWNhbGx5IG5lZWRlZC4gIEl0IGNhbiBiZSBjb25jbHVkZWQgdGhhdCBhcyBwZW9wbGUgZ2V0IG9sZGVyLCB0aGV5IG1heSBiZWNvbWUgbW9yZSBmYW1pbGlhciB3aXRoIHRoZSBsYW5kLCBvciBzaW1wbHkgYmUgbW9yZSBjYXJlZnVsIHdpdGggdGhlaXIgYWN0aXZpdGllcy4gIFNlYXJjaCBhbmQgUmVzY3VlIHJlc3BvbnNlcyBhcmUgdGhlIG9ubHkgdHlwZSB0aGF0IG9jY3VyIGZvciBwZW9wbGUgMzAgYW5kIHVuZGVyLCBwcm92aW5nIHRoYXQgdGhlIHlvdW5nZXIgcGVvcGxlIHNob3VsZCBwcm9iYWJseSBoYXZlIG1vcmUgdHJhaW5pbmcgb24gY2VydGFpbiBza2lsbHMgYmVmb3JlIHRyYXZlbGluZyBpbnRvIHRoZSBtb3VudGFpbnMgYWxvbmUuICBBbHRob3VnaCwgdGhlIG1lYW4gaXMgYXJvdW5kIDM1IHRvIDQwIHllYXJzIG9sZCwgbWVhbmluZyB0aGF0IG1vc3RseSBwZW9wbGUgb3ZlciAzMCBhcmUgbW9yZSBjb21tb24gaW4gZ2VuZXJhbCBpbiB0aGUgYXJlYSwgYW5kIHRoZXJlZm9yZSBuZWVkaW5nIHRoZSBoZWxwIGp1c3QgYXMgbXVjaC4gIE92ZXJhbGwgYWxsIHBlb3BsZSB0cmF2ZXJzaW5nIGludG8gdGhlIG1vdW50YWlucyBzaG91bGQgaGF2ZSBiZXR0ZXIgc2FmZXR5IGF3YXJlbmVzcyBiZWZvcmUgZ29pbmcgb3V0IGFsb25lLCBpbiBjYXNlIGFueSBwcm9ibGVtcyBvY2N1ci4NCkFub3RoZXIgaW1wb3J0YW50IHBvaW50IHRvIG1ha2UgYWJvdXQgdGhpcyBkYXRhIGlzIHRoZSBub3RpY2FibGUgY29ycmVsYXRpb24gYmV0d2VlbiBvbGRlciBwZW9wbGUgYW5kIHJlY292ZXJ5LiAgQXMgd2UgYWxsIGtub3csIGFzIHdlIGFnZSBvdXIgYm9kaWVzIGFyZSBub3QgYXMgY2FwYWJsZSBhcyB0aGV5IHVzZWQgdG8gYmUsIG1lYW5pbmcgdGhleSBhcmUgbW9yZSBsaWtlbHkgdG8gYmUgaW5qdXJlZCwgY2F1c2luZyBhIG5lZWQgdG8gYmUgcmVzY3VlZC4gIE9uZSB3YXkgdG8gZGVjcmVhc2UgdGhlIG5lZWQgZm9yIHJlc2N1ZXMgY291bGQgYmUgZXh0cmEgdHJhaW5pbmcgYWJvdXQgc2FmZXR5IHByZWNhdXRpb25zIGFuZCBnaXZlIGZhaXIgd2FybmluZ3MgYWJvdXQgY2VydGFpbiBhY3Rpdml0aWVzLiAgRm9yIGV4YW1wbGUgaWYgYSBoaWtlIGhhcyBvbmUgYXJlYSB0aGF0IGdldHMgc2xpcHBlcnkgYmVmb3JlIHRoZSByZXN0LCBwdXQgdXAgbW9yZSBzaWducyBvciBtYWtlIHN1cmUgaXQgaXMgbWVudGlvbmVkIGJlZm9yZSBhbnlvbmUgZXZlbiBiZWdpbnMgdGhlIGV4Y3Vyc2lvbi4NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpyYXdfYWRrX2RhdGEgJT4lIA0KICBnZ3Bsb3QoYWVzKHkgPSBzdWJqZWN0X2FnZSwgeCA9IHJlc3BvbnNlX3R5cGUpKSArDQogIGdlb21fYm94cGxvdCgpKw0KICBnZ3RpdGxlKCJTdWJqZWN0IEFnZSB2cyBSZXNwb25zZSBUeXBlIikgDQpgYGANCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpzZWFyY2hfZGF0YSA8LSByYXdfYWRrX2RhdGEgJT4lDQogIGZpbHRlcihyZXNwb25zZV90eXBlPT0iU2VhcmNoIikNCnJlc2N1ZV9kYXRhIDwtIHJhd19hZGtfZGF0YSAlPiUNCiAgZmlsdGVyKHJlc3BvbnNlX3R5cGU9PSJSZXNjdWUiKQ0KcmVjb3ZlcnlfZGF0YSA8LSByYXdfYWRrX2RhdGEgJT4lDQogIGZpbHRlcihyZXNwb25zZV90eXBlPT0iUmVjb3ZlcnkiKQ0KTUFyZWNvdmVyeSA8LSBtZWFuKHJlY292ZXJ5X2RhdGEkc3ViamVjdF9hZ2UsIG5hLnJtID0gIlRSVUUiKQ0KTUFyZXNjdWUgPC0gbWVhbihyZXNjdWVfZGF0YSRzdWJqZWN0X2FnZSwgbmEucm0gPSAiVFJVRSIpDQpNQXNlYXJjaCA8LSBtZWFuKHNlYXJjaF9kYXRhJHN1YmplY3RfYWdlLCBuYS5ybSA9ICJUUlVFIikNCmNhdCgnTWVhbiBhZ2VzDQpSZWNvdmVyeT0gJyxNQXJlY292ZXJ5KQ0KY2F0KCcNClJlc2N1ZT0gJyxNQXJlc2N1ZSkNCmNhdCgnDQpTZWFyY2g9ICcsTUFzZWFyY2gpDQpgYGANCg0KUGVyZm9ybSBhdCBsZWFzdCBvbmUgcmVsZXZhbnQgaHlwb3RoZXNpcyB0ZXN0LiANCg0KcmVzaWR1YWxzIHZzIGZpdHRlZA0Kbm9ybWFsIFFRDQpzY2FsZSBsb2NhdGlvbg0KcmVzaWR1YWxzIHZzIGxldmVyYWdlDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KbW9kZWwgPSBsbShudW1iZXJfb2ZfcmFuZ2Vyc19pbnZvbHZlZCB+IHN1YmplY3RfYWdlLCBkYXRhID0gcmF3X2Fka19kYXRhKQ0Kc3VtbWFyeShtb2RlbCkNCnBsb3QobW9kZWwpDQpgYGANCg0KDQoNClRoZSBmaXJzdCBoeXBvdGhlc2lzIHRlc3Qgd2FzIGEgdHdvLXRhaWxlZCB0ZXN0IHRvIGZpbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBiZXR3ZWVuIGFtb3VudCBvZiBtYWxlcyBhbmQgZmVtYWxlcy4NCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmZlbWFsZSA8LSByYXdfYWRrX2RhdGEgJT4lDQogIGZpbHRlcihzdWJqZWN0X2dlbmRlciA9PSAiRiIpDQoNCm1hbGUgPC0gcmF3X2Fka19kYXRhICU+JQ0KICBmaWx0ZXIoc3ViamVjdF9nZW5kZXIgPT0gIk0iKQ0KDQpoMSA8LSB0LnRlc3QoZmVtYWxlJHN1YmplY3RfYWdlLCBtYWxlJHN1YmplY3RfYWdlLCBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiLCB2YXIuZXF1YWwgPSBGQUxTRSkNCmgxDQpgYGANCg0KVGhlIHNlY29uZCBoeXBvdGhlc2lzIHRlc3QgcGVyZm9ybWVkIHdhcyBhIHNpbmdsZS10YWlsZWQgaHlwb3RoZXNpcyB0byBzZWUgaWYgdGhlIGFnZXMgYmV0d2VlbiByZXNjdWVkIG1hbGVzIGFuZCBmZW1hbGVzIGRpZmZlci4gIA0KVGhlIG51bGwgaHlwb3RoZXNpcyBpcyBtdV9mIC0gbXVfbSA9IDANClRoZSBhbHRlcm5hdGl2ZSBoeXBvdGhlc2lzIGlzIG11X2YgLSBtdV9tIDwgMA0KVGhlIHQtdGVzdCBpcyBwZXJmb3JtZWQgdG8gZmluZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gc2FtcGxlcy4NCkFmdGVyIHRoZSB0LXRlc3QgaXMgcnVuLCB0aGUgdmFsdWUgaXMgLTMuMTc2LCBtZWFuaW5nIHdlIHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzIGJlY2F1c2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBtYWxlcyBhbmQgZmVtYWxlcyBpcyBub3QgMC4NCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCg0KZmVtYWxlIDwtIHJhd19hZGtfZGF0YSAlPiUNCiAgZmlsdGVyKHN1YmplY3RfZ2VuZGVyID09ICJGIikNCg0KbWFsZSA8LSByYXdfYWRrX2RhdGEgJT4lDQogIGZpbHRlcihzdWJqZWN0X2dlbmRlciA9PSAiTSIpDQoNCmgyIDwtIHQudGVzdChmZW1hbGUkc3ViamVjdF9hZ2UsIG1hbGUkc3ViamVjdF9hZ2UsIGFsdGVybmF0aXZlID0gImxlc3MiLCB2YXIuZXF1YWwgPSBGQUxTRSkNCmgyDQoNCmBgYA0KDQoNCg0KDQpDaGVjayB0aGUgdmFyaW91cyBhc3N1bXB0aW9ucyBvZiBmb3Igc3RhdGlzdGljYWwgdGVzdHMuDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQptb2RlbCA9IGxtKG51bWJlcl9vZl9yYW5nZXJzX2ludm9sdmVkIH4gc3ViamVjdF9hZ2UsIGRhdGEgPSByYXdfYWRrX2RhdGEpDQpzdW1tYXJ5KG1vZGVsKQ0KcGxvdChtb2RlbCkNCmBgYA0KDQoNCkZvciB0aGUgbGluZWFyIHJlZ3Jlc3Npb24gYW5hbHlzaXMsIGludGVycHJldCBjb2VmZmljaWVudHMgYW5kL29yIG1ha2UgcmVsZXZhbnQgcHJlZGljdGlvbnMgYW5kDQpzdW1tYXJpemUgdGhlaXIgbWVhbmluZy4NCg0KYGBge3IgZWNobz1GQUxTRX0NCnJhd19hZGtfZGF0YSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHN1YmplY3RfYWdlLCB5ID0gbnVtYmVyX29mX3JhbmdlcnNfaW52b2x2ZWQpKSsNCiAgZ2VvbV9wb2ludCgpKw0KICBnZW9tX2FibGluZShpbnRlcmNlcHQgPSAzLjE0MjUzNSwgc2xvcGUgPSAwLjAwNDYyNywgY29sPSJtYWdlbnRhIikrDQogIGdndGl0bGUoIlJhbmdlcnMgdG8gQWdlIFJlZ3Jlc3Npb24iKSANCmBgYA0KDQouLi4NCg0KDQojIENvbmNsdXNpb25zDQouLi4NCg0KDQojIFJlZmVyZW5jZXMgey19DQoNCkRhdGEud29ybGQNCmh0dHBzOi8vZGF0YS53b3JsZC9kYXRhLW55LWdvdi91Nmh1LWg3cDUNCg==
>>>>>>> ca5a01703f207ba1e1c6466ecb3e4c110123f95f